package com.by.common.controller;

import com.by.common.bean.ResultBean;
import com.by.common.ex.ValidateException;
import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

public abstract class BaseController {
    private final int SUCCESS=200;
    private final int FAIL=0;

    /**
     * 操作成功
     * @param msg 消息描述
     * @return
     */
    protected ResultBean success(String msg){
         return convert(SUCCESS,msg,null);
    }

    /**
     * 操作成功
     * @param msg 消息描述
     * @param data  接口数据
     * @return
     */
    protected ResultBean success(String msg,Object data){
       return convert(SUCCESS,msg,data);
    }

    /**
     * 操作失败
     * @param msg
     * @return
     */
    protected ResultBean fail(String msg){
        return convert(FAIL,msg,null);
    }

    /**
     * 操作失败
     * @param msg
     * @param data
     * @return
     */
    protected  ResultBean fail(String msg,Object data){
        return convert(FAIL,msg,data);
    }

    /**
     * 保存结果
     * @param rs
     * @return
     */
    protected ResultBean saveResult(int rs){
        return rs==1?success("保存成功"):fail("保存失败");
    }


    protected ResultBean updateResult(int rs){
        return rs==1?success("修改成功"):fail("修改失败");
    }


    protected ResultBean deleteResult(int rs){
        return rs==1?success("删除成功"):fail("删除失败");
    }



    /**
     * 转换成统一结果
     * @param code
     * @param msg
     * @param data
     * @return
     */
    ResultBean  convert(int code,String msg,Object data){
        return new ResultBean(code,msg,data);
    }


    protected void validate(BindingResult result){
        //获取验证信息
        List<FieldError> fieldErrors=result.getFieldErrors();
        if(fieldErrors.size()>0){
            Map<String,String> error=new HashMap<>();
            //遍历错误字段
            fieldErrors.forEach(el->{
                error.put(el.getField(),el.getDefaultMessage());
            });

            //将异常信息抛给虚拟机
            throw new ValidateException(error);
        }
    }
}
